Système de Backup Automatique avec Raspberry Pi et Électronique

Ce projet allie programmation, électronique et Raspberry Pi pour créer un système de sauvegarde interactif et éducatif, parfait pour les débutants !

Matériel Requis

Schéma de Connexion

Installation des Bibliothèques

Ajoutez les bibliothèques pour gérer l'écran OLED et le capteur de température :

sudo apt-get install python3-pip
pip3 install adafruit-circuitpython-ssd1306 adafruit-blinka w1thermsensor

Script Python

Voici un script amélioré pour inclure l'écran OLED et le capteur de température :

import RPi.GPIO as GPIO
import subprocess
import time
from w1thermsensor import W1ThermSensor
from adafruit_ssd1306 import SSD1306_I2C
from board import SCL, SDA
import busio
from PIL import Image, ImageDraw, ImageFont

# GPIO setup
BUTTON_PIN = 17
RED_LED = 22
GREEN_LED = 27
BLUE_LED = 18
BUZZER_PIN = 23
GPIO.setmode(GPIO.BCM)
GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(RED_LED, GPIO.OUT)
GPIO.setup(GREEN_LED, GPIO.OUT)
GPIO.setup(BLUE_LED, GPIO.OUT)
GPIO.setup(BUZZER_PIN, GPIO.OUT)

# OLED setup
i2c = busio.I2C(SCL, SDA)
oled = SSD1306_I2C(128, 64, i2c)
font = ImageFont.load_default()

# Capteur de température
sensor = W1ThermSensor()

def display_message(message):
    image = Image.new("1", (128, 64))
    draw = ImageDraw.Draw(image)
    draw.text((0, 0), message, font=font, fill=255)
    oled.image(image)
    oled.show()

def backup():
    try:
        display_message("Backup en cours...")
        GPIO.output(GREEN_LED, GPIO.HIGH)
        start_time = time.time()
        subprocess.run(["rsync", "-av", "--delete", "/chemin/vers/dossier", "/mnt/backup"])
        GPIO.output(GREEN_LED, GPIO.LOW)
        elapsed_time = time.time() - start_time
        display_message(f"Backup OK\nTemps : {elapsed_time:.2f}s")
    except Exception as e:
        GPIO.output(RED_LED, GPIO.HIGH)
        display_message(f"Erreur : {e}")
        time.sleep(2)
        GPIO.output(RED_LED, GPIO.LOW)

def check_temperature():
    temp = sensor.get_temperature()
    if temp > 70:  # Température critique
        GPIO.output(RED_LED, GPIO.HIGH)
        display_message(f"Temp élevée: {temp:.1f}C")
    else:
        display_message(f"Temp : {temp:.1f}C")
    time.sleep(2)

def button_callback(channel):
    GPIO.output(BLUE_LED, GPIO.HIGH)
    backup()
    GPIO.output(BLUE_LED, GPIO.LOW)
    check_temperature()

GPIO.add_event_detect(BUTTON_PIN, GPIO.RISING, callback=button_callback, bouncetime=200)

display_message("Système prêt.")
try:
    while True:
        time.sleep(1)
except KeyboardInterrupt:
    GPIO.cleanup()

Utilisation

Le système affichera l'état du backup sur l'écran OLED et signalera toute température critique. Appuyez sur le bouton pour lancer manuellement une sauvegarde.

Résumé

Ce projet est idéal pour découvrir l'intégration d'électronique et de programmation. Il allie apprentissage et fonctionnalité, tout en offrant un système robuste de sauvegarde.